// 实体基础视图 - 负责实体的视觉表现
export abstract class EntityView {
    protected node: cc.Node;
    protected model: EntityModel;
    protected animationComponent: any; // 动画组件
    protected healthBarView: HealthBarView;
    
    constructor(model: EntityModel) {
        this.model = model;
        this.node = new cc.Node();
        this.node.name = `Entity_${model.id}`;
        
        // 创建健康条
        this.createHealthBar();
    }
    
    // 初始化
    public initialize(): void {
        // 加载资源
        this.loadResources(() => {
            // 创建动画组件
            this.createAnimationComponent();
            
            // 播放默认动画
            this.playIdleAnimation();
            
            // 更新位置
            this.setPosition(this.model.position);
        });
    }
    
    // 加载资源
    protected abstract loadResources(callback: () => void): void;
    
    // 创建动画组件
    protected abstract createAnimationComponent(): void;
    
    // 创建健康条
    protected createHealthBar(): void {
        if (this.shouldShowHealthBar()) {
            this.healthBarView = new HealthBarView(this.model);
            this.node.addChild(this.healthBarView.getNode());
        }
    }
    
    // 是否显示健康条
    protected shouldShowHealthBar(): boolean {
        // 基础实现，子类可重写
        return this.model.category !== EntityCategory.PROJECTILE;
    }
    
    // 设置位置
    public setPosition(position: cc.Vec2): void {
        if (this.node) {
            this.node.setPosition(position.x, position.y);
            
            // 更新Z轴排序
            this.updateZIndex();
        }
    }
    
    // 设置方向
    public setDirection(direction: cc.Vec2): void {
        if (this.node) {
            // 设置朝向
            if (direction.x !== 0) {
                this.node.scaleX = direction.x > 0 ? 1 : -1;
            }
        }
    }
    
    // 更新Z轴排序
    protected updateZIndex(): void {
        if (this.node) {
            // 根据Y坐标设置Z轴排序
            this.node.zIndex = 1000 - Math.floor(this.node.y);
        }
    }
    
    // 播放待机动画
    public playIdleAnimation(): void {
        this.playAnimation('idle', true);
    }
    
    // 播放移动动画
    public playMoveAnimation(): void {
        this.playAnimation('move', true);
    }
    
    // 播放攻击动画
    public playAttackAnimation(callback?: () => void): void {
        this.playAnimation('attack', false, callback);
    }
    
    // 播放受击动画
    public playHitAnimation(): void {
        this.playAnimation('hit', false);
    }
    
    // 播放死亡动画
    public playDeathAnimation(callback?: () => void): void {
        this.playAnimation('die', false, callback);
    }
    
    // 播放动画
    protected abstract playAnimation(name: string, loop: boolean, callback?: () => void): void;
    
    // 显示伤害数字
    public showDamageNumber(damage: number): void {
        if (this.node) {
            // 创建伤害数字
            BattleCore.instance.getBattleView().createDamageText(
                damage,
                this.node.position,
                false
            );
        }
    }
    
    // 显示治疗数字
    public showHealNumber(amount: number): void {
        if (this.node) {
            // 创建治疗数字
            BattleCore.instance.getBattleView().createDamageText(
                amount,
                this.node.position,
                true
            );
        }
    }
    
    // 更新
    public update(dt: number): void {
        // 更新健康条
        if (this.healthBarView) {
            this.healthBarView.update();
        }
    }
    
    // 销毁
    public destroy(): void {
        if (this.node) {
            this.node.destroy();
        }
    }
    
    // 获取节点
    public getNode(): cc.Node {
        return this.node;
    }
}